package com.uroad.lib.util.check;

import android.util.Patterns;
import android.webkit.URLUtil;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 验证相关类
 **/
public class CheckUtil {
    /**
     * 是否为账号规范 如： 6~18个字符，可使用字母、数字、下划线，需以字母开头
     *
     * @param text
     * @return
     */
    public static boolean isAccountStandard(String text) {
        // 不能包含中文
        if (hasChinese(text)) {
            return false;
        }

        /**
         * 正则匹配： [a-zA-Z]:字母开头 \\w :可包含大小写字母，数字，下划线,@ {5,17} 5到17位，加上开头字母
         * 字符串长度6到18
         */
        String format = "[a-zA-Z](@?+\\w){5,17}+";
        if (text.matches(format)) {
            return true;
        }
        return false;
    }

    /**
     * 是否为密码规范
     *
     * @param text
     * @return
     * @author luman
     */
    public static boolean isPasswordStandard(String text) {

        // 不能包含中文
        if (hasChinese(text)) {
            return false;
        }

        /**
         * 正则匹配 \\w{6,18}匹配所有字母、数字、下划线 字符串长度6到18（不含空格）
         */
        String format = "\\w{6,18}+";
        if (text.matches(format)) {
            return true;
        }
        return false;
    }

    /**
     * 中文识别
     *
     * @author luman
     */
    public static boolean hasChinese(String source) {
        String reg_charset = "([\\u4E00-\\u9FA5]*+)";
        Pattern p = Pattern.compile(reg_charset);
        Matcher m = p.matcher(source);
        boolean hasChinese = false;
        while (m.find()) {
            if (!"".equals(m.group(1))) {
                hasChinese = true;
            }

        }
        return hasChinese;
    }

    /**
     * 校验是否为正确的手机号码
     * 修改：如果传空字符会报空指针异常，加try，catch
     **/
    public static boolean isMobileNO(String mobiles) {
        //	Pattern p = Pattern.compile("^((13[0-9])|(15[0-9])|(18[0-9]))\\d{8}$");
        try {
            Pattern p = Pattern.compile("^1\\d{10}$");
            Matcher m = p.matcher(mobiles);
            return m.matches();
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

    }

    /**
     * 校验是否为正确的邮箱
     **/
    public static boolean isEmail(String email) {
        String str = "^([a-zA-Z0-9]*[-_]?[a-zA-Z0-9]+)*@([a-zA-Z0-9]*[-_]?[a-zA-Z0-9]+)+[\\.][A-Za-z]{2,3}([\\.][A-Za-z]{2})?$";
        Pattern p = Pattern.compile(str);
        Matcher m = p.matcher(email);
        return m.matches();
    }

    /**
     * 车牌号判断的正则表达式(首位是省市汉字)
     * 京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼
     */
    public static boolean isCarNo(String carno) {
        Pattern carnoMach = Pattern
                .compile("^[\u4e00-\u9fa5]{1}[a-zA-Z]{1}[a-zA-Z0-9]{5}$");
        Matcher m = carnoMach.matcher(carno);
        return m.matches();
    }

    public static boolean isUrl(String query){
        return Patterns.WEB_URL.matcher(query).matches() || URLUtil.isValidUrl(query);
    }

}
